## Pattern matching

`Pattern matching` представляет применение конструкции `match`, которая позволяет сопоставить выражение с некоторым шаблоном. 

И если выражение соответствует шаблону, то выполняются определенные действия. 

В этом смысле конструкция match похожа на конструкцию `if/else/elif`, которая выполняет определенные действия в зависимости от некоторого условия.

Однако функциональность `match` гораздо шире - она также позволяет извлечь данные из составных типов и применить действия к различным частям объектов.
Конструкция match имеет следующее формальное определение:

```python
match выражение:
    case шаблон_1:
        действие_1
    case шаблон_2:
        действие_2
    ................
    case шаблон_N:
        действие_N
    case _:
        действие_по_умолчанию
```
### Пример 1

```python
language = "english"
language = "russian"

match language:
    case "russian":
        print("Привет")
    case "english":
        print("Hello")
    case "german":
        print("Hallo")
```

Причем если выражение из `match` не соответствует ни одному из шаблонов `case`, то соответственно ни один из этих блоков `case` не выполняется.

Если необходимо, чтобы при несовпадении значений (если ни один из шаблонов case не соответствует выражению match) выполнялись некоторые действия по умолчанию, то в этом случае применяется шаблон _ (прочерк):
```python
case _:
    print("Undefined")
```

Но также можно определить блок case, который позволяет сравнивать сразу с несколькими знечениями. В этом случае значения разделяются вертикальной чертой:


### Пример 2
```python
case "american english" | "british english" | "english":
    print("Hello")
```

### Пример 3

```python
day = "Monday"
match day:
    case "Saturday" | "Sunday":
        print("Weekend")
    case "Monday" | "Tuesday" | "Wednesday" | "Thursday" | "Friday":
        print("Work")
```